/**
 * @file dwt.h
 * @author chushang (email:chushangcs@163.com)
 * @brief 2025-04-19: 添加dwt使能，基础延时等基础功能
 * @version 0.1
 * @date 2025-04-19
 *
 * @copyright Copyright (c) 2025
 *
 */

#ifndef __DWT_H
#define __DWT_H

#include "stm32f1xx_hal.h"

typedef struct _SysTime
{
    uint32_t us;
    uint32_t ms;
    uint32_t s;
} SysTime;

extern SysTime sys_time; // 系统运行的时间

/**
 * @brief 初始化DWT内核外设
 *
 * @param _freq_mhz [in] cpu运行频率，单位MHz
 */
void DWT_Init(uint32_t _freq_mhz);

/**
 * @brief 更新系统运行时间
 *
 */
void DWT_UpdateSysTime(void);

/**
 * @brief 读取系统时间戳，单位s
 *
 * @return 系统运行的时间，单位s
 */
float DWT_GetTimeStamp_s(void);

/**
 * @brief 读取系统时间戳，单位ms
 *
 * @return 系统运行的时间，单位ms
 */
float DWT_GetTimeStamp_ms(void);

/**
 * @brief 读取系统时间戳，单位us
 *
 * @return 系统运行的时间，单位us
 */
float DWT_GetTimeStamp_us(void);

/**
 * @brief 延时指定时间
 *
 * @param time_s [in] 延时的时长，单位s
 */
void DWT_Delay_s(float time_s);

/**
 * @brief 延时指定时间
 *
 * @param time_s [in] 延时的时长，单位ms
 */
void DWT_Delay_ms(float time_ms);

/**
 * @brief 延时指定时间
 *
 * @param time_s [in] 延时的时长，单位us
 */
void DWT_Delay_us(float time_us);

#endif // !__DWT_H